const Koa = require('koa')
const path = require('path')
const cors = require('koa2-cors')
const koaBody = require('koa-body')
const staticFiles = require('koa-static')
const router = require('./router')

const app = new Koa()
const port = 9016

// 日志记录
app.use(async (ctx, next) => {
  const start = new Date()
  await next()
  const ms = new Date() - start
  const sendTime = start.toLocaleString()
  console.log(`ip: ${ctx.request.ip} [ ${ctx.method} ${ctx.url} ] time: ${sendTime}`, ms, 'ms')
})
// 一些路由拦截处理
app.use(async (ctx, next) => {
  /**dist/McRequest 下的文件自动添加 .js 后缀 方便测试页面 esm 加载 */
  if (ctx.url.startsWith('/McRequest') && !ctx.url.endsWith('.js')) {
    ctx.url = `${ctx.url}.js`
  }
  await next()
})
// 设置静态目录
app.use(staticFiles(path.resolve(__dirname, '../dist'), { root: 'mc' }))
// 跨域设置
app.use(
  cors({
    origin: function (ctx) {
      return ctx.header.origin
    },
    allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], // 设置所允许的 HTTP请求方法
    credentials: true // 标示该响应是合法的
  })
)
// 上传设置
app.use(
  koaBody({
    multipart: true,
    formidable: {
      maxFileSize: 200 * 1024 * 1024, // 设置上传文件大小最大限制，默认200M
      multipart: true // 是否支持 multipart-formdate 的表单
    }
  })
)
// 加载路由
app.use(router.routes()).use(router.allowedMethods())

// 启动服务
app.listen(port, () => {
  console.log('\x1B[33m%s\x1b[0m:', '服务启动成功')
  console.log(`- Local:     http://localhost:${port}\n-`)
})
